#include "TDACorreo.h"
#include "logdebug.h"

#include <string.h>
#include <time.h>
#include "TDAListaDestinatarios.h"


void crearCorreo(TDACorreo* correo){

    setAsunto(correo, DEFAULT_SUB);
    correo->qtyDest = 1;
    setTextoCuerpo(correo, DEFAULT_MSG);
    setRemitente(correo, DEFAULT_RMT);

}

void destruirCorreo(TDACorreo* correo){

    setAsunto(correo, EMPTY_DATA);
    correo->qtyDest = 0;
    setTextoCuerpo(correo, EMPTY_DATA);
    setRemitente(correo, EMPTY_DATA);
    setFilename(correo, EMPTY_DATA);

}

void getRemitente(TDACorreo correo, char* remitente){
    strcpy(remitente,correo.remitente);
}

void setRemitente(TDACorreo* correo, char* remitente){
    strcpy(correo->remitente,remitente);
}

void getDestinatarios(TDACorreo correo,TListaSimple* ListaDestinatarios){

    int i=0;

    ldest_Crear(ListaDestinatarios,sizeof(char[MAX_ADDR_SIZE]));
    if ( correo.qtyDest ){

        ldest_Insertar(ListaDestinatarios,LS_PRIMERO,correo.destinatarios[i]);
        i++;

        while( i < correo.qtyDest ){

            ldest_Insertar(ListaDestinatarios,LS_SIGUIENTE,correo.destinatarios[i]);
            i++;
        }
    }
}

int getCantidadDestinatarios(TDACorreo correo) {

	return correo.qtyDest;
}



void setDestinatario(TDACorreo* correo, char* destinatario) {
    strcpy(correo->destinatarios[0],destinatario);
}

void agregarDestinatario(TDACorreo* correo,char* destinatario){


    int value;

    value = buscarDestinatario(correo,destinatario);

    if ( value != DEST_NOT_FOUND )
        strcpy( correo->destinatarios[value], destinatario);

}

void eliminarDestinatario(TDACorreo* correo,char* destinatario){

    int value=0;
    int i=0;

    value = buscarDestinatario(correo,destinatario);

    if ( value != DEST_NOT_FOUND ){

        for ( i = value ; i < correo->qtyDest ; i++)
            strcpy( correo->destinatarios[i], correo->destinatarios[i+1] );

        strcpy( correo->destinatarios[i], "");
    }

}


time_t getFechaHoraEnviado(TDACorreo correo) {
	return correo.fechaHora;
}

void setFechaHoraEnviado(TDACorreo* correo, time_t fechaHora) {
    correo->fechaHora = fechaHora;
}

void getAsunto(TDACorreo correo, char* asunto) {
	strcpy(asunto,correo.asunto);
}

void setAsunto(TDACorreo* correo, char* asunto) {
    strcpy(correo->asunto,asunto);

}

void getTextoCuerpo(TDACorreo correo, char* textoCuerpo) {
	strcpy(textoCuerpo,correo.cuerpo);
}

void setTextoCuerpo(TDACorreo* correo, char* textoCuerpo) {
	strcpy(correo->cuerpo,textoCuerpo);
}

void getFilename(TDACorreo correo, char* filename){
    strcpy(filename,correo.filename);
}

void setFilename(TDACorreo *correo, char* filename){
    strcpy(correo->filename, filename);
}


int importarDesde(TDACorreo* correo, FILE* archivo) {

    char str_auxdestinatarios[MAX_ADDR_TODOS_LOS_DEST];
    char str_aux[MAX_ADDR_TODOS_LOS_DEST];
    char str_dest[MAX_ADDR_SIZE];
    int i,j,longString;
    int pos=0;

	fscanf(archivo,"%*s");
	fgets(str_auxdestinatarios,MAX_ADDR_TODOS_LOS_DEST -1,archivo);
    longString = strlen(str_auxdestinatarios);


    for ( i=1,j=0 ; i < longString; i++,j++ ){

        if ( ( str_auxdestinatarios[i] == ',' ) || ( str_auxdestinatarios[i] == '\0' ) || ( str_auxdestinatarios[i] == '\n' )  ){
            str_dest[j] = '\0';
            strcpy(correo->destinatarios[pos],str_dest);
            pos++;
            correo->qtyDest = pos;
            j=-1;

        }else
            str_dest[j] = str_auxdestinatarios[i];

    }

	fscanf(archivo,"%*s");
	fgets(correo->asunto,MAX_SUBJECT_SIZE - 1,archivo);
	fgets(correo->cuerpo,MAX_BODY_SIZE,archivo);

	while ((!feof(archivo)) && (strlen(correo->cuerpo)<MAX_BODY_SIZE)){
            fgets(str_aux,MAX_BODY_SIZE,archivo);

            if(!feof(archivo))
                strcat(correo->cuerpo,str_aux);
	}

	return 0;
}

int escribirA(TDACorreo correo, FILE* archivo) {

	time_t fechaHora;
	char str_dest[MAX_ADDR_TODOS_LOS_DEST];
	int i=0;

	fechaHora = getFechaHoraEnviado(correo);

	fprintf(archivo,"From: %s\n",correo.remitente);

    strcpy( str_dest, correo.destinatarios[i]);

    i++;

    for ( ; i < correo.qtyDest ; i++ ){

        strcat(str_dest,",");
        strcat(str_dest, correo.destinatarios[i]);
    }

	fprintf(archivo,"To: %s\n",str_dest);
	fprintf(archivo,"Subject: %s",correo.asunto);
	fprintf(archivo,"Date: %s",ctime(&fechaHora));
	fprintf(archivo,"%s\n",correo.cuerpo);

	fclose(archivo);
	return 0;
}


int buscarDestinatario(TDACorreo* correo,char* destinatario){

    int i=0;

    for ( ; i < correo->qtyDest ; i++ ){

        if ( !strcmp(correo->destinatarios[i], destinatario) ){
            return i;
        }
    }
    return DEST_NOT_FOUND;

}


void getDestinatarioX(TDACorreo* correo,char* destinatario, int posicion){

    if ( posicion < correo->qtyDest )
        strcpy(destinatario, correo->destinatarios[posicion]);

}


void printDestinatarios(TDACorreo* correo){
    int i=0;

    for ( ; i < correo->qtyDest ; i++)
        printf("\n Destinatario [%d] = %s ",i,correo->destinatarios[i]);

}

void printCorreo(TDACorreo correo){

    int i=0;

    printf("\n\n --> Asunto: %s",correo.asunto);
    printf("\n --> Destinatarios:");

    for( ; i < correo.qtyDest ; i++)
        printf(" %s, ",correo.destinatarios[i]);

    printf("\n --> Remitente: %s", correo.remitente);
    printf("\n --> Cantidad de destinatarios: %d\n\n", correo.qtyDest);
    printf("\n --> Cuerpo: %s\n",correo.cuerpo);

}
